# 清洗开发提供的数据，包含p神打标和豆包打标

from openpyxl import load_workbook, Workbook
import json

# 输入和输出文件路径
input_file = r"C:\Users\18017\Downloads\验证数据(1).xlsx"
output_file = '清洗后的数据1.xlsx'

# 加载原始Excel文件
wb = load_workbook(input_file)
ws = wb.active  # 获取活动工作表

# 创建一个新的工作簿用于保存清洗后的数据
new_wb = Workbook()
new_ws = new_wb.active

# 复制表头
for col in range(1, ws.max_column + 1):
    new_ws.cell(row=1, column=col).value = ws.cell(row=1, column=col).value

# 定义处理函数
def extract_text(data):
    """提取desc中的sentences的text字段，并换行"""
    try:
        # 先解析desc字典，再提取sentences
        desc = json.loads(data)['desc']
        sentences = desc['sentences']
        text_list = [sentence['text'] for sentence in sentences]
        return '\n'.join(text_list)  # 使用换行符连接
    except (TypeError, KeyError, json.JSONDecodeError):
        return ""  # 如果解析失败，返回空字符串

def clean_pshen(data):
    """清理P神本地接口打标中的\，并换行"""
    try:
        # 替换转义的换行符\n为实际换行，然后去除其他反斜杠
        data = data.replace('\\n', '\n').replace('\\', '')
        # 如果是字典格式，去掉外层的{}，只保留键值对内容
        if data.startswith('{') and data.endswith('}'):
            data = data[1:-1]  # 去掉首尾的{}
        return data
    except AttributeError:
        return data

def extract_dify_tags(data):
    """提取Dify豆包接口打标中的tagName:tagValue"""
    try:
        tags = json.loads(data)
        tag_list = [f"{item['tagName']}:{item['tagValue']}" for item in tags]
        return '\n'.join(tag_list)  # 使用换行符连接
    except (TypeError, KeyError, json.JSONDecodeError):
        return data  # 如果解析失败，返回原始数据

# 处理每一行数据
for row in range(2, ws.max_row + 1):  # 从第2行开始处理
    new_ws.cell(row=row, column=1).value = ws.cell(row=row, column=1).value  # mogu_call_record_id
    new_ws.cell(row=row, column=2).value = extract_text(ws.cell(row=row, column=2).value)  # 语音转文字
    new_ws.cell(row=row, column=3).value = clean_pshen(ws.cell(row=row, column=3).value)  # P神本地接口打标
    new_ws.cell(row=row, column=4).value = extract_dify_tags(ws.cell(row=row, column=4).value)  # Dify豆包接口打标

# 保存新的Excel文件
new_wb.save(output_file)
print(f"数据清洗完成，已保存到 {output_file}")